package com.demo.chapter6collect;

import java.util.Comparator;
import java.util.IntSummaryStatistics;
import java.util.Optional;

import com.demo.domain.Dish;

import static java.util.stream.Collectors.*;

public class CollectorsReduce {

	public static void demo(){
		//计算总热量
		Dish.menu.stream().collect(summingInt(Dish::getCalories));
		Dish.menu.stream().mapToInt(Dish::getCalories).sum();//最优方案
		//计算总热量，summingInt等方法都是reducing的特殊形式
		//reducing由三部分组成：1、归约操作起始值，2、转换函数，3、将两个项目累计成一个同类型的值
		Dish.menu.stream().collect(reducing(0, Dish::getCalories, (x, y) -> x + y));

		//获取热量最大的菜
		Comparator<Dish> com = (a, b) -> a.getCalories() > b.getCalories() ? 1 : 0;
		Optional<Dish> op = Dish.menu.stream().collect(maxBy(com));
		Optional<Dish> op2 = Dish.menu.stream().collect(reducing(
				(d1, d2) -> d1.getCalories() > d2.getCalories() ? d1 : d2));
	}

	public static void main(String[] args) {
		demo();
	}

}
